package com.crm.service.cluePoolManager;

import com.crm.model.entity.cluePoolManager.ClueFollow;
import com.crm.model.qo.cluePoolManager.ClueFollowQO;
import com.crm.model.vo.cluePoolManager.ClueFollowChartVO;
import com.crm.model.vo.cluePoolManager.ClueFollowVO;
import com.crm.model.vo.cluePoolManager.ContactDetailFollowVO;
import com.crm.model.vo.cluePoolManager.ForgetCustomerVO;
import com.crm.model.vo.contactManager.ContactReportListVO;
import com.crm.model.vo.contactManager.ContactStatisticsVO;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @ Author ：pym
 * @ Date   ：2021/1/8 13:01
 */
public interface ClueFollowDbService {
    /**
     * 线索池详情-线索清单-跟进记录
     * @param clueId        ---线索Id
     * @return
     */
    List<ClueFollowVO> selectClueFollowVOList(String clueId);

    /**
     * @author wll
     * info 用户模块-我的线索池-线索清单-添加跟进
     * @return
     */
    Boolean addClueFollow(ClueFollow clueFollow);

    /**
     * 查询线索池跟进记录
     * @param cluePoolId
     * @return
     */
    long selectClueFollowCountByPoolId(String cluePoolId);

    /**
     * 线索池详情-线索清单-跟进记录
     * @param clueId        ---线索Id
     * @return
     */
    List<ClueFollow> selectClueFollowList(String clueId);

    /**
     * @author wll
     * info 用户模块-我的线索池-线索清单-修改跟进
     * yincuimei合用用户系统-跟进记录-跟进详情页面-可修改跟进详情(备注:如有修改请联调测试这个功能)
     * @return
     */
    Boolean updateClueFollow(ClueFollow clueFollow);

    /**
     * 客户详情跟进记录
     * @param order
     * @param customerId
     * @return
     */
    List<ClueFollowVO> followVOListByCustomerId(String order, String customerId);

    /**
     * 根据客户id获取客户跟进记录
     * @param customerId
     * @return
     */
    List<ClueFollow> selectClueFollowListByCustomerId(String customerId);


    /**
     * 根据用户id获取跟进记录信息
     * @param accountId
     * @author: lixq-f
     * @return
     */
    List<ForgetCustomerVO> selectForgetRemindMsg(String accountId);

    /**
     * 用户系统--客户管理>我的客户>跟进记录详情
     * @param clueFollowId  ---跟进记录主键
     * @param type 1:单品客户跟进详情
     * @author yincuimei
     * @return
     */
    ClueFollowVO selectClueFollowVOById(String clueFollowId, String type,Integer followWay);

    /**
     * 联系人详情-跟进记录查询-通过联系人id
     * @param contactId 联系人id
     * @param dateUnit 本周 1 本月 2
     * @return
     */
    List<ContactDetailFollowVO> selectFollowByContactId(String contactId, Integer dateUnit);

    /**
     * 根据跟进记录id查询跟进记录信息
     * @param clueFollowId 根据记录id
     * @return
     */
    ClueFollow selectClueFollowById(String clueFollowId);

    /**
     * 跟进记录
     * @param clueFollowQO
     * @param sortOrder
     * @param dateUnit 1今天 2本周 3本月 4本年
     * @return
     */
    List<ClueFollowVO> selectClueFollowPageList(ClueFollowQO clueFollowQO, String sortOrder,Integer dateUnit);

    /**
     * 根据日期获取当前
     * @param planDate
     * @return
     */
    List<Integer> getFollowCountByPlanDate(String planDate,String accountId,String startDate,String endDate);

    /**
     * 图表数据获取
     * @Author renshaorong
     * @Date 2021/4/12
     * @param dateUnit---本周1/本月2/上月3
     * @param startTime 开始日期
     * @param endTime 结束日期
     * @return
     */
    List<ClueFollowChartVO> selectClueFollowChartVOList(int dateUnit, Date startTime, Date endTime, String userAccountId);
    List<ClueFollowChartVO> selectAdminClueFollowChartVOList(String startTime, String endTime, String companyId);

    /**
     * 获取时间列表（折线图X轴）
     * @Author renshaorong
     * @Date 2021/4/13
     * @param dateUnit
     * @param startTime
     * @param endTime
     * @return
     */
    List<String> getTimeList(Integer dateUnit, Date startTime, Date endTime);

    /**
     * 获取跟进次数列表（折线图）
     * @Author renshaorong
     * @Date 2021/4/13
     * @param dateUnit
     * @param startTime
     * @param endTime
     * @param type 跟进类型
     * @return
     */
    List<Integer> getFollowWayDataList(Integer dateUnit, Date startTime, Date endTime,Integer type, String userAccountId);

    /**
     * 总跟进次数饼状图数据获取
     * @Author renshaorong
     * @Date 2021/4/14
     * @param dateUnit---本周1/本月2/上月3
     * @param startTime 开始日期
     * @param endTime 结束日期
     * @return
     */
    List<Map> getNumPieData(Integer dateUnit, Date startTime, Date endTime, String userAccountId);

    List<Map> getAdminNumPieData(String startTime, String endTime, String userAccountId);

    /**
     * 获取商机状态饼状图数据
     * @Author renshaorong
     * @Date 2021/4/14
     * @param dateUnit
     * @param startTime
     * @param endTime
     * @param type 跟进类型
     * @return
     */
    List<Map<String, Object>> getBusinessStatusData(Integer dateUnit, Date startTime, Date endTime, Integer type, String userAccountId);

    /**
     * 获取过程状态饼状图数据
     * @Author renshaorong
     * @Date 2021/4/14
     * @param dateUnit
     * @param startTime
     * @param endTime
     * @param type 跟进类型
     * @return
     */
    List<Map<String, Object>> getProcessStatusData(Integer dateUnit, Date startTime, Date endTime, Integer type, String userAccountId);

    List<Map<String, Object>> getAdminProcessStatusData( String startTime, String endTime, Integer type, String userAccountId);
    /**
     * 查询联系人最新的一条跟进记录
     * @param contactId 联系人id
     * @return
     */
    List<ClueFollow> getClueFollowByContactId(String contactId);


    /**
     * @Description: 按天统计时间段内跟进次数
     * @Param: [startTime, endTime]
     * @Return: java.util.List<com.crm.model.vo.contactManager.ContactStatisticsVO>
     * @Author: lixq-f
     * @Date: 2021/4/16
    **/
    List<ContactStatisticsVO> statisticsFollowTimesByDay(String startTime, String endTime,
                                                         String accountId);


    /**
     * @Description: 按月统计本年度跟进次数
     * @Param: [startTime, endTime]
     * @Return: java.util.List<com.crm.model.vo.contactManager.ContactStatisticsVO>
     * @Author: lixq-f
     * @Date: 2021/4/16
     **/
    List<ContactStatisticsVO> statisticsFollowTimesByMonth(int thisYear,String accountId);


    /**
     * 联系人报表列表
     * @param accountId
     * @param startTime
     * @param endTime
     * @return
     */
    List<ContactReportListVO> getContactReportList(String accountId, String startTime, String endTime);

    /**
     * 单品客户跟进记录
     * @Author pym
     * @Date  2021/5/12 14:22
     * @param order 排序
     * @param singleProductCustomerId 单品客户ID
     * @param accountId 账号ID
     * @return {@link {java.util.List<com.crm.model.vo.cluePoolManager.ClueFollowVO>}}
     */
    List<ClueFollowVO> selectClueFollowListByCustomerId(String order, String singleProductCustomerId, String accountId);

    /**
     * 根据是否有跟进记录判断是否可删除
     * @Author renshaorong
     * @Date 2021/5/27
     * @param canBeDelete
     * @return
     */
    Integer canBeDelete(String canBeDelete);


    /**
     * @Description: 批量插入跟进记录
     * @Param: [followList]
     * @Return: java.lang.Integer
     * @Author: lixq-f
     * @Date: 2021/6/8
    **/
    Integer batchInsert(List<ClueFollow> followList);

    /**
     * 根据创建时间和跟进详情和跟进人id匹配
     * @param createTm
     * @param followDetail
     * @param accountId
     * @return
     */
    ClueFollowVO selectClueFollow(String createTm, String followDetail, String accountId,String customerId);

    /**
     * 插入跟进记录
     * @param clueFollow
     * @return
     */
    boolean insertFollow(ClueFollow clueFollow);

    List<ClueFollowVO> selectClueFollowWayIsNull();

    /**
     * 通过跟进id查找呼叫表中的通话记录url
     * @Author renshaorong
     * @Date 2021/8/23
     * @param followId
     * @return
     */
    String getCallRecordByFollowId(String followId);



    /**
     * 根据时间轴、归属公司Id、跟进类型 查询跟进统计
     *
     * @param startTime 时间轴开始
     * @param endTime   时间轴结束
     * @param type      跟进类型
     * @param companyId 归属公司Id
     * @return
     */
    List<Integer> getFollowWayDataListByCompanyId(String startTime, String endTime,Integer type, String companyId);

}
